001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Jan 9, 2003
005     * Time: 10:16:34 PM
006     */
007    
008    package EVolve.util.equators;
009    
010    import java.util.*;
011    
012    public class UnorderedSet extends Set{
013        private HashMap data;
014    
015        public UnorderedSet(int interval) {
016            data = new HashMap();
017            size = interval;
018            emptySlot = 0;
019        }
020    
021        public boolean exist(long element) {
022    
023            return data.containsKey(new Long(element));
024    
025        }
026    
027        public Set newSet() {
028            return new UnorderedSet(size);
029        }
030    
031        public long getElement(int index) {
032            Iterator it = data.keySet().iterator();
033            int i = 0;
034            while (it.hasNext()) {
035                Long key = (Long)it.next();
036                if (i<index) continue;
037                return key.longValue();
038            }
039            return -1;
040        }
041    
042        public void addElement(long element) {
043            if (emptySlot>=size) {
044                System.out.println("Set is full, unable to add new elements!!!");
045                return;
046            }
047            Long key = new Long(element);
048            if (data.containsKey(key)) {
049                Long value = (Long)data.get(key);
050                data.put(key, new Long(value.longValue()+1));
051            } else {
052                data.put(key, new Long(1));
053            }
054            emptySlot++;
055        }
056    
057        public Set union(Set set) {
058            Set result = new UnorderedSet(size*2);
059            HashMap setData[] = new HashMap[2];
060    
061            setData[0] = data;
062            setData[1] = ((UnorderedSet)set).data;
063    
064            for (int i=0; i<setData.length; i++) {
065                Iterator it = setData[i].keySet().iterator();
066                while (it.hasNext()) {
067                    result.addElement(((Long)it.next()).longValue());
068                }
069            }
070    
071            return result;
072        }
073    
074        public Set intersection(Set set) {
075            HashMap setData[] = new HashMap[2];
076            Set result = new UnorderedSet(size);
077    
078            setData[0] = data;
079            setData[1] = ((UnorderedSet)set).data;
080    
081            Iterator it = setData[0].keySet().iterator();
082            while (it.hasNext()) {
083                Long key = (Long)it.next();
084                if (setData[1].containsKey(key))
085                    result.addElement(key.longValue());
086            }
087    
088            return result;
089        }
090    
091        public boolean equals(Set set, float percent) {
092            float counter = 0;
093            HashMap setData[] = new HashMap[2];
094    
095            setData[0] = data;
096            setData[1] = ((UnorderedSet)set).data;
097    
098            Iterator it = setData[0].keySet().iterator();
099            while (it.hasNext()) {
100                Long key = (Long)it.next();
101                if (setData[1].containsKey(key))
102                    counter = counter + ((Long)setData[0].get(key)).longValue()+((Long)setData[1].get(key)).longValue();
103            }
104    
105            return ((100*counter/(2*size)) >= percent);
106        }
107    
108        public long getHashValue() {
109            long result = 0;
110    
111    
112            Iterator it = data.keySet().iterator();
113            while (it.hasNext()) {
114                Long key = (Long)it.next();
115                result = result ^ key.intValue();
116            }
117    
118            return result;
119        }
120    
121        public long getEntityId(int i) {
122            if (data.size() == 0)
123                return -1;
124    
125            Iterator it = data.keySet().iterator();
126    
127            return ((Long)it.next()).longValue();
128        }
129    
130        public Object clone() {
131            return super.clone();
132        }
133    }